package registry

import (
	"encoding/json"
	"fmt"
)

const (
	ServiceDNS  = "dns"
	ProjectName = "demo-grpc"
)

// Service 定义了一个服务的结构
type Service struct {
	Project  string            // 项目名称  "demo-grpc"
	Name     string            // 服务名称  "auth"
	Address  string            // 服务地址  "127.0.0.1:6102"
	Weight   int               // 服务权重  50
	Metadata map[string]string // 其他元数据
}

// NewService 创建一个新的Service实例
func NewService(name, address string) *Service {
	return &Service{
		Project:  ProjectName,
		Name:     name,
		Address:  address,
		Weight:   50, // 默认权重为50
		Metadata: make(map[string]string),
	}
}

// SetWeight 设置服务权重
func (s *Service) SetWeight(weight int) *Service {
	s.Weight = weight
	return s
}

// AddMetadata 添加元数据
func (s *Service) AddMetadata(key, value string) *Service {
	s.Metadata[key] = value
	return s
}

// 将 Service 转换为 JSON 字符串
func (s *Service) ToJSON() (string, error) {
	jsonData, err := json.Marshal(s)
	if err != nil {
		return "", err
	}
	return string(jsonData), nil
}

// 将 JSON 字符串转换为 Service
func (s *Service) FromJSON(jsonStr string) error {
	return json.Unmarshal([]byte(jsonStr), s)
}

// 获取服务注册的 key
func (s *Service) GetKey() string {
	return fmt.Sprintf("%s/%s/%s", s.Project, s.Name, s.Address)
}
